home *** CD-ROM | disk | FTP | other *** search
MacBinary | 1992-09-27 | 7.3 KB | [TEXT/MPS ] |
open in:
MacOS 8.1
|
Win98
|
DOS
browse contents |
view JSON data
|
view as text
This file was processed as: MacBinary
(archive/macBinary).
Confidence | Program | Detection | Match Type | Support
|
---|
10%
| dexvert
| MacBinary (archive/macBinary)
| fallback
| Supported |
1%
| dexvert
| Text File (text/txt)
| fallback
| Supported |
100%
| file
| MacBinary II, Sun Sep 27 17:53:08 1992, modified Sun Sep 27 17:53:08 1992, creator 'MPS ', type ASCII, 6665 bytes "bigfloat.pl" , at 0x1a89 428 bytes resource
| default (weak)
| |
99%
| file
| data
| default
| |
74%
| TrID
| Macintosh plain text (MacBinary)
| default
| |
25%
| TrID
| MacBinary 2
| default (weak)
| |
100%
| siegfried
| fmt/1762 MacBinary (II)
| default
| |
100%
| lsar
| MacBinary
| default
|
|
id metadata |
---|
key | value |
---|
macFileType | [TEXT] |
macFileCreator | [MPS ] |
hex view+--------+-------------------------+-------------------------+--------+--------+
|00000000| 00 0b 62 69 67 66 6c 6f | 61 74 2e 70 6c 00 00 00 |..bigflo|at.pl...|
|00000010| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000020| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000030| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000040| 00 54 45 58 54 4d 50 53 | 20 00 00 00 00 00 00 00 |.TEXTMPS| .......|
|00000050| 00 00 00 00 00 1a 09 00 | 00 01 ac a6 eb dd c4 a6 |........|........|
|00000060| eb dd c4 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000070| 00 00 00 00 00 00 00 00 | 00 00 81 81 df cd 00 00 |........|........|
|00000080| 70 61 63 6b 61 67 65 20 | 62 69 67 66 6c 6f 61 74 |package |bigfloat|
|00000090| 3b 0d 72 65 71 75 69 72 | 65 20 22 62 69 67 69 6e |;.requir|e "bigin|
|000000a0| 74 2e 70 6c 22 3b 0d 23 | 20 41 72 62 69 74 72 61 |t.pl";.#| Arbitra|
|000000b0| 72 79 20 6c 65 6e 67 74 | 68 20 66 6c 6f 61 74 20 |ry lengt|h float |
|000000c0| 6d 61 74 68 20 70 61 63 | 6b 61 67 65 0d 23 0d 23 |math pac|kage.#.#|
|000000d0| 20 62 79 20 4d 61 72 6b | 20 42 69 67 67 61 72 0d | by Mark| Biggar.|
|000000e0| 23 0d 23 20 6e 75 6d 62 | 65 72 20 66 6f 72 6d 61 |#.# numb|er forma|
|000000f0| 74 0d 23 20 20 20 63 61 | 6e 6f 6e 69 63 61 6c 20 |t.# ca|nonical |
|00000100| 73 74 72 69 6e 67 73 20 | 68 61 76 65 20 74 68 65 |strings |have the|
|00000110| 20 66 6f 72 6d 20 2f 5b | 2b 2d 5d 5c 64 2b 45 5b | form /[|+-]\d+E[|
|00000120| 2b 2d 5d 5c 64 2b 2f 0d | 23 20 20 20 49 6e 70 75 |+-]\d+/.|# Inpu|
|00000130| 74 20 76 61 6c 75 65 73 | 20 63 61 6e 20 68 61 76 |t values| can hav|
|00000140| 65 20 69 6e 62 65 64 64 | 65 64 20 77 68 69 74 65 |e inbedd|ed white|
|00000150| 73 70 61 63 65 0d 23 20 | 45 72 72 6f 72 20 72 65 |space.# |Error re|
|00000160| 74 75 72 6e 73 0d 23 20 | 20 20 27 4e 61 4e 27 20 |turns.# | 'NaN' |
|00000170| 20 20 20 20 20 20 20 20 | 20 20 41 6e 20 69 6e 70 | | An inp|
|00000180| 75 74 20 70 61 72 61 6d | 65 74 65 72 20 77 61 73 |ut param|eter was|
|00000190| 20 22 4e 6f 74 20 61 20 | 4e 75 6d 62 65 72 22 20 | "Not a |Number" |
|000001a0| 6f 72 20 0d 23 20 20 20 | 20 20 20 20 20 20 20 20 |or .# | |
|000001b0| 20 20 20 20 20 20 20 20 | 20 20 20 20 64 69 76 69 | | divi|
|000001c0| 64 65 20 62 79 20 7a 65 | 72 6f 20 6f 72 20 73 71 |de by ze|ro or sq|
|000001d0| 72 74 20 6f 66 20 6e 65 | 67 61 74 69 76 65 20 6e |rt of ne|gative n|
|000001e0| 75 6d 62 65 72 0d 23 20 | 44 69 76 69 73 69 6f 6e |umber.# |Division|
|000001f0| 20 69 73 20 63 6f 6d 70 | 75 74 65 64 20 74 6f 20 | is comp|uted to |
|00000200| 0d 23 20 20 20 6d 61 78 | 28 24 64 69 76 5f 73 63 |.# max|($div_sc|
|00000210| 61 6c 65 2c 6c 65 6e 67 | 74 68 28 64 69 76 69 64 |ale,leng|th(divid|
|00000220| 65 6e 64 29 2e 6c 65 6e | 67 74 68 28 64 69 76 69 |end).len|gth(divi|
|00000230| 73 6f 72 29 29 20 0d 23 | 20 20 20 64 69 67 69 74 |sor)) .#| digit|
|00000240| 73 20 62 79 20 64 65 66 | 61 75 6c 74 2e 0d 23 20 |s by def|ault..# |
|00000250| 41 6c 73 6f 20 75 73 65 | 64 20 66 6f 72 20 64 65 |Also use|d for de|
|00000260| 66 61 75 6c 74 20 73 71 | 72 74 20 73 63 61 6c 65 |fault sq|rt scale|
|00000270| 0d 0d 24 64 69 76 5f 73 | 63 61 6c 65 20 3d 20 34 |..$div_s|cale = 4|
|00000280| 30 3b 0d 0d 23 20 52 6f | 75 6e 64 69 6e 67 20 6d |0;..# Ro|unding m|
|00000290| 6f 64 65 73 20 6f 6e 65 | 20 6f 66 20 27 65 76 65 |odes one| of 'eve|
|000002a0| 6e 27 2c 20 27 6f 64 64 | 27 2c 20 27 2b 69 6e 66 |n', 'odd|', '+inf|
|000002b0| 27 2c 20 27 2d 69 6e 66 | 27 2c 20 27 7a 65 72 6f |', '-inf|', 'zero|
|000002c0| 27 20 6f 72 20 27 74 72 | 75 6e 63 27 2e 0d 0d 24 |' or 'tr|unc'...$|
|000002d0| 72 6e 64 5f 6d 6f 64 65 | 20 3d 20 27 65 76 65 6e |rnd_mode| = 'even|
|000002e0| 27 3b 0d 0d 23 20 20 20 | 62 69 67 66 6c 6f 61 74 |';..# |bigfloat|
|000002f0| 20 72 6f 75 74 69 6e 65 | 73 0d 23 0d 23 20 20 20 | routine|s.#.# |
|00000300| 66 61 64 64 28 4e 53 54 | 52 2c 20 4e 53 54 52 29 |fadd(NST|R, NSTR)|
|00000310| 20 72 65 74 75 72 6e 20 | 4e 53 54 52 20 20 20 20 | return |NSTR |
|00000320| 20 20 20 20 20 20 20 20 | 61 64 64 69 74 69 6f 6e | |addition|
|00000330| 0d 23 20 20 20 66 73 75 | 62 28 4e 53 54 52 2c 20 |.# fsu|b(NSTR, |
|00000340| 4e 53 54 52 29 20 72 65 | 74 75 72 6e 20 4e 53 54 |NSTR) re|turn NST|
|00000350| 52 20 20 20 20 20 20 20 | 20 20 20 20 20 73 75 62 |R | sub|
|00000360| 74 72 61 63 74 69 6f 6e | 0d 23 20 20 20 66 6d 75 |traction|.# fmu|
|00000370| 6c 28 4e 53 54 52 2c 20 | 4e 53 54 52 29 20 72 65 |l(NSTR, |NSTR) re|
|00000380| 74 75 72 6e 20 4e 53 54 | 52 20 20 20 20 20 20 20 |turn NST|R |
|00000390| 20 20 20 20 20 6d 75 6c | 74 69 70 6c 69 63 61 74 | mul|tiplicat|
|000003a0| 69 6f 6e 0d 23 20 20 20 | 66 64 69 76 28 4e 53 54 |ion.# |fdiv(NST|
|000003b0| 52 2c 20 4e 53 54 52 5b | 2c 53 43 41 4c 45 5d 29 |R, NSTR[|,SCALE])|
|000003c0| 20 72 65 74 75 72 6e 73 | 20 4e 53 54 52 20 20 20 | returns| NSTR |
|000003d0| 64 69 76 69 73 69 6f 6e | 20 74 6f 20 53 43 41 4c |division| to SCAL|
|000003e0| 45 20 70 6c 61 63 65 73 | 0d 23 20 20 20 66 6e 65 |E places|.# fne|
|000003f0| 67 28 4e 53 54 52 29 20 | 72 65 74 75 72 6e 20 4e |g(NSTR) |return N|
|00000400| 53 54 52 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |STR | |
|00000410| 20 20 20 20 20 6e 65 67 | 61 74 69 6f 6e 0d 23 20 | neg|ation.# |
|00000420| 20 20 66 61 62 73 28 4e | 53 54 52 29 20 72 65 74 | fabs(N|STR) ret|
|00000430| 75 72 6e 20 4e 53 54 52 | 20 20 20 20 20 20 20 20 |urn NSTR| |
|00000440| 20 20 20 20 20 20 20 20 | 20 20 61 62 73 6f 6c 75 | | absolu|
|00000450| 74 65 20 76 61 6c 75 65 | 0d 23 20 20 20 66 63 6d |te value|.# fcm|
|00000460| 70 28 4e 53 54 52 2c 4e | 53 54 52 29 20 72 65 74 |p(NSTR,N|STR) ret|
|00000470| 75 72 6e 20 43 4f 44 45 | 20 20 20 20 20 20 20 20 |urn CODE| |
|00000480| 20 20 20 20 20 63 6f 6d | 70 61 72 65 20 75 6e 64 | com|pare und|
|00000490| 65 66 2c 3c 30 2c 3d 30 | 2c 3e 30 0d 23 20 20 20 |ef,<0,=0|,>0.# |
|000004a0| 66 72 6f 75 6e 64 28 4e | 53 54 52 2c 20 53 43 41 |fround(N|STR, SCA|
|000004b0| 4c 45 29 20 72 65 74 75 | 72 6e 20 4e 53 54 52 20 |LE) retu|rn NSTR |
|000004c0| 20 20 20 20 20 20 20 20 | 72 6f 75 6e 64 20 74 6f | |round to|
|000004d0| 20 53 43 41 4c 45 20 64 | 69 67 69 74 73 0d 23 20 | SCALE d|igits.# |
|000004e0| 20 20 66 66 72 6f 75 6e | 64 28 4e 53 54 52 2c 20 | ffroun|d(NSTR, |
|000004f0| 53 43 41 4c 45 29 20 72 | 65 74 75 72 6e 20 4e 53 |SCALE) r|eturn NS|
|00000500| 54 52 20 20 20 20 20 20 | 20 20 72 6f 75 6e 64 20 |TR | round |
|00000510| 61 74 20 53 43 41 4c 45 | 74 68 20 70 6c 61 63 65 |at SCALE|th place|
|00000520| 0d 23 20 20 20 66 6e 6f | 72 6d 28 4e 53 54 52 29 |.# fno|rm(NSTR)|
|00000530| 20 72 65 74 75 72 6e 20 | 28 4e 53 54 52 29 20 20 | return |(NSTR) |
|00000540| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 6e 6f 72 | | nor|
|00000550| 6d 61 6c 69 7a 65 0d 23 | 20 20 20 66 73 71 72 74 |malize.#| fsqrt|
|00000560| 28 4e 53 54 52 5b 2c 20 | 53 43 41 4c 45 5d 29 20 |(NSTR[, |SCALE]) |
|00000570| 72 65 74 75 72 6e 20 4e | 53 54 52 20 20 20 20 20 |return N|STR |
|00000580| 20 20 20 73 71 72 74 20 | 74 6f 20 53 43 41 4c 45 | sqrt |to SCALE|
|00000590| 20 70 6c 61 63 65 73 0d | 0c 0d 23 20 43 6f 6e 76 | places.|..# Conv|
|000005a0| 65 72 74 20 61 20 6e 75 | 6d 62 65 72 20 74 6f 20 |ert a nu|mber to |
|000005b0| 63 61 6e 6f 6e 69 63 61 | 6c 20 73 74 72 69 6e 67 |canonica|l string|
|000005c0| 20 66 6f 72 6d 2e 0d 23 | 20 20 20 54 61 6b 65 73 | form..#| Takes|
|000005d0| 20 73 6f 6d 65 74 68 69 | 6e 67 20 74 68 61 74 20 | somethi|ng that |
|000005e0| 6c 6f 6f 6b 73 20 6c 69 | 6b 65 20 61 20 6e 75 6d |looks li|ke a num|
|000005f0| 62 65 72 20 61 6e 64 20 | 63 6f 6e 76 65 72 74 73 |ber and |converts|
|00000600| 20 69 74 20 74 6f 0d 23 | 20 20 20 74 68 65 20 66 | it to.#| the f|
|00000610| 6f 72 6d 20 2f 5e 5b 2b | 2d 5d 5c 64 2b 45 5b 2b |orm /^[+|-]\d+E[+|
|00000620| 2d 5d 5c 64 2b 24 2f 2e | 0d 73 75 62 20 6d 61 69 |-]\d+$/.|.sub mai|
|00000630| 6e 27 66 6e 6f 72 6d 20 | 7b 20 23 28 73 74 72 69 |n'fnorm |{ #(stri|
|00000640| 6e 67 29 20 72 65 74 75 | 72 6e 20 66 6e 75 6d 5f |ng) retu|rn fnum_|
|00000650| 73 74 72 0d 20 20 20 20 | 6c 6f 63 61 6c 28 24 5f |str. |local($_|
|00000660| 29 20 3d 20 40 5f 3b 0d | 20 20 20 20 73 2f 5c 73 |) = @_;.| s/\s|
|00000670| 2b 2f 2f 67 3b 20 20 20 | 20 20 20 20 20 20 20 20 |+//g; | |
|00000680| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000690| 20 20 20 20 23 20 73 74 | 72 69 70 20 77 68 69 74 | # st|rip whit|
|000006a0| 65 20 73 70 61 63 65 0d | 20 20 20 20 69 66 20 28 |e space.| if (|
|000006b0| 2f 5e 28 5b 2b 2d 5d 3f | 29 28 5c 64 2a 29 28 5c |/^([+-]?|)(\d*)(\|
|000006c0| 2e 28 5c 64 2a 29 29 3f | 28 5b 45 65 5d 28 5b 2b |.(\d*))?|([Ee]([+|
|000006d0| 2d 5d 3f 5c 64 2b 29 29 | 3f 24 2f 20 26 26 20 22 |-]?\d+))|?$/ && "|
|000006e0| 24 32 24 34 22 20 6e 65 | 20 27 27 29 20 7b 0d 09 |$2$4" ne| '') {..|
|000006f0| 26 6e 6f 72 6d 28 28 24 | 31 20 3f 20 22 24 31 24 |&norm(($|1 ? "$1$|
|00000700| 32 24 34 22 20 3a 20 22 | 2b 24 32 24 34 22 29 2c |2$4" : "|+$2$4"),|
|00000710| 28 28 24 34 20 6e 65 20 | 27 27 29 20 3f 20 24 36 |(($4 ne |'') ? $6|
|00000720| 2d 6c 65 6e 67 74 68 28 | 24 34 29 20 3a 20 24 36 |-length(|$4) : $6|
|00000730| 29 29 3b 0d 20 20 20 20 | 7d 20 65 6c 73 65 20 7b |));. |} else {|
|00000740| 0d 09 27 4e 61 4e 27 3b | 0d 20 20 20 20 7d 0d 7d |..'NaN';|. }.}|
|00000750| 0d 0d 23 20 6e 6f 72 6d | 61 6c 69 7a 65 20 6e 75 |..# norm|alize nu|
|00000760| 6d 62 65 72 20 2d 2d 20 | 66 6f 72 20 69 6e 74 65 |mber -- |for inte|
|00000770| 72 6e 61 6c 20 75 73 65 | 0d 73 75 62 20 6e 6f 72 |rnal use|.sub nor|
|00000780| 6d 20 7b 20 23 28 6d 61 | 6e 74 69 73 73 61 2c 20 |m { #(ma|ntissa, |
|00000790| 65 78 70 6f 6e 65 6e 74 | 29 20 72 65 74 75 72 6e |exponent|) return|
|000007a0| 20 66 6e 75 6d 5f 73 74 | 72 0d 20 20 20 20 6c 6f | fnum_st|r. lo|
|000007b0| 63 61 6c 28 24 5f 2c 20 | 24 65 78 70 29 20 3d 20 |cal($_, |$exp) = |
|000007c0| 40 5f 3b 0d 20 20 20 20 | 69 66 20 28 24 5f 20 65 |@_;. |if ($_ e|
|000007d0| 71 20 27 4e 61 4e 27 29 | 20 7b 0d 09 27 4e 61 4e |q 'NaN')| {..'NaN|
|000007e0| 27 3b 0d 20 20 20 20 7d | 20 65 6c 73 65 20 7b 0d |';. }| else {.|
|000007f0| 09 73 2f 5e 28 5b 2b 2d | 5d 29 30 2b 2f 24 31 2f |.s/^([+-|])0+/$1/|
|00000800| 3b 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |; | |
|00000810| 20 20 20 20 20 20 20 20 | 20 23 20 73 74 72 69 70 | | # strip|
|00000820| 20 6c 65 61 64 69 6e 67 | 20 7a 65 72 6f 73 0d 09 | leading| zeros..|
|00000830| 69 66 20 28 6c 65 6e 67 | 74 68 28 24 5f 29 20 3d |if (leng|th($_) =|
|00000840| 3d 20 31 29 20 7b 0d 09 | 20 20 20 20 27 2b 30 45 |= 1) {..| '+0E|
|00000850| 2b 30 27 3b 0d 09 7d 20 | 65 6c 73 65 20 7b 0d 09 |+0';..} |else {..|
|00000860| 20 20 20 20 24 65 78 70 | 20 2b 3d 20 6c 65 6e 67 | $exp| += leng|
|00000870| 74 68 28 24 31 29 20 69 | 66 20 28 73 2f 28 30 2b |th($1) i|f (s/(0+|
|00000880| 29 24 2f 2f 29 3b 20 20 | 23 20 73 74 72 69 70 20 |)$//); |# strip |
|00000890| 74 72 61 69 6c 69 6e 67 | 20 7a 65 72 6f 73 0d 09 |trailing| zeros..|
|000008a0| 20 20 20 20 73 70 72 69 | 6e 74 66 28 22 25 73 45 | spri|ntf("%sE|
|000008b0| 25 2b 6c 64 22 2c 20 24 | 5f 2c 20 24 65 78 70 29 |%+ld", $|_, $exp)|
|000008c0| 3b 0d 09 7d 0d 20 20 20 | 20 7d 0d 7d 0d 0d 23 20 |;..}. | }.}..# |
|000008d0| 6e 65 67 61 74 69 6f 6e | 0d 73 75 62 20 6d 61 69 |negation|.sub mai|
|000008e0| 6e 27 66 6e 65 67 20 7b | 20 23 28 66 6e 75 6d 5f |n'fneg {| #(fnum_|
|000008f0| 73 74 72 29 20 72 65 74 | 75 72 6e 20 66 6e 75 6d |str) ret|urn fnum|
|00000900| 5f 73 74 72 0d 20 20 20 | 20 6c 6f 63 61 6c 28 24 |_str. | local($|
|00000910| 5f 29 20 3d 20 26 27 66 | 6e 6f 72 6d 28 24 5f 5b |_) = &'f|norm($_[|
|00000920| 30 5d 29 3b 0d 20 20 20 | 20 76 65 63 28 24 5f 2c |0]);. | vec($_,|
|00000930| 30 2c 38 29 20 3d 5e 20 | 6f 72 64 28 27 2b 27 29 |0,8) =^ |ord('+')|
|00000940| 20 5e 20 6f 72 64 28 27 | 2d 27 29 20 75 6e 6c 65 | ^ ord('|-') unle|
|00000950| 73 73 20 24 5f 20 65 71 | 20 27 2b 30 45 2b 30 27 |ss $_ eq| '+0E+0'|
|00000960| 3b 20 23 20 66 6c 69 70 | 20 73 69 67 6e 0d 20 20 |; # flip| sign. |
|00000970| 20 20 73 2f 5e 48 2f 4e | 2f 3b 0d 20 20 20 20 24 | s/^H/N|/;. $|
|00000980| 5f 3b 0d 7d 0d 0d 23 20 | 61 62 73 6f 6c 75 74 65 |_;.}..# |absolute|
|00000990| 20 76 61 6c 75 65 0d 73 | 75 62 20 6d 61 69 6e 27 | value.s|ub main'|
|000009a0| 66 61 62 73 20 7b 20 23 | 28 66 6e 75 6d 5f 73 74 |fabs { #|(fnum_st|
|000009b0| 72 29 20 72 65 74 75 72 | 6e 20 66 6e 75 6d 5f 73 |r) retur|n fnum_s|
|000009c0| 74 72 0d 20 20 20 20 6c | 6f 63 61 6c 28 24 5f 29 |tr. l|ocal($_)|
|000009d0| 20 3d 20 26 27 66 6e 6f | 72 6d 28 24 5f 5b 30 5d | = &'fno|rm($_[0]|
|000009e0| 29 3b 0d 20 20 20 20 73 | 2f 5e 2d 2f 2b 2f 3b 09 |);. s|/^-/+/;.|
|000009f0| 09 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |. | |
|00000a00| 20 20 20 20 20 20 20 20 | 23 20 6d 61 73 68 20 73 | |# mash s|
|00000a10| 69 67 6e 0d 20 20 20 20 | 24 5f 3b 0d 7d 0d 0d 23 |ign. |$_;.}..#|
|00000a20| 20 6d 75 6c 74 69 70 6c | 69 63 61 74 69 6f 6e 0d | multipl|ication.|
|00000a30| 73 75 62 20 6d 61 69 6e | 27 66 6d 75 6c 20 7b 20 |sub main|'fmul { |
|00000a40| 23 28 66 6e 75 6d 5f 73 | 74 72 2c 20 66 6e 75 6d |#(fnum_s|tr, fnum|
|00000a50| 5f 73 74 72 29 20 72 65 | 74 75 72 6e 20 66 6e 75 |_str) re|turn fnu|
|00000a60| 6d 5f 73 74 72 0d 20 20 | 20 20 6c 6f 63 61 6c 28 |m_str. | local(|
|00000a70| 24 78 2c 24 79 29 20 3d | 20 28 26 27 66 6e 6f 72 |$x,$y) =| (&'fnor|
|00000a80| 6d 28 24 5f 5b 30 5d 29 | 2c 26 27 66 6e 6f 72 6d |m($_[0])|,&'fnorm|
|00000a90| 28 24 5f 5b 31 5d 29 29 | 3b 0d 20 20 20 20 69 66 |($_[1]))|;. if|
|00000aa0| 20 28 24 78 20 65 71 20 | 27 4e 61 4e 27 20 7c 7c | ($x eq |'NaN' |||
|00000ab0| 20 24 79 20 65 71 20 27 | 4e 61 4e 27 29 20 7b 0d | $y eq '|NaN') {.|
|00000ac0| 09 27 4e 61 4e 27 3b 0d | 20 20 20 20 7d 20 65 6c |.'NaN';.| } el|
|00000ad0| 73 65 20 7b 0d 09 6c 6f | 63 61 6c 28 24 78 6d 2c |se {..lo|cal($xm,|
|00000ae0| 24 78 65 29 20 3d 20 73 | 70 6c 69 74 28 27 45 27 |$xe) = s|plit('E'|
|00000af0| 2c 24 78 29 3b 0d 09 6c | 6f 63 61 6c 28 24 79 6d |,$x);..l|ocal($ym|
|00000b00| 2c 24 79 65 29 20 3d 20 | 73 70 6c 69 74 28 27 45 |,$ye) = |split('E|
|00000b10| 27 2c 24 79 29 3b 0d 09 | 26 6e 6f 72 6d 28 26 27 |',$y);..|&norm(&'|
|00000b20| 62 6d 75 6c 28 24 78 6d | 2c 24 79 6d 29 2c 24 78 |bmul($xm|,$ym),$x|
|00000b30| 65 2b 24 79 65 29 3b 0d | 20 20 20 20 7d 0d 7d 0d |e+$ye);.| }.}.|
|00000b40| 0c 0d 23 20 61 64 64 69 | 74 69 6f 6e 0d 73 75 62 |..# addi|tion.sub|
|00000b50| 20 6d 61 69 6e 27 66 61 | 64 64 20 7b 20 23 28 66 | main'fa|dd { #(f|
|00000b60| 6e 75 6d 5f 73 74 72 2c | 20 66 6e 75 6d 5f 73 74 |num_str,| fnum_st|
|00000b70| 72 29 20 72 65 74 75 72 | 6e 20 66 6e 75 6d 5f 73 |r) retur|n fnum_s|
|00000b80| 74 72 0d 20 20 20 20 6c | 6f 63 61 6c 28 24 78 2c |tr. l|ocal($x,|
|00000b90| 24 79 29 20 3d 20 28 26 | 27 66 6e 6f 72 6d 28 24 |$y) = (&|'fnorm($|
|00000ba0| 5f 5b 30 5d 29 2c 26 27 | 66 6e 6f 72 6d 28 24 5f |_[0]),&'|fnorm($_|
|00000bb0| 5b 31 5d 29 29 3b 0d 20 | 20 20 20 69 66 20 28 24 |[1]));. | if ($|
|00000bc0| 78 20 65 71 20 27 4e 61 | 4e 27 20 7c 7c 20 24 79 |x eq 'Na|N' || $y|
|00000bd0| 20 65 71 20 27 4e 61 4e | 27 29 20 7b 0d 09 27 4e | eq 'NaN|') {..'N|
|00000be0| 61 4e 27 3b 0d 20 20 20 | 20 7d 20 65 6c 73 65 20 |aN';. | } else |
|00000bf0| 7b 0d 09 6c 6f 63 61 6c | 28 24 78 6d 2c 24 78 65 |{..local|($xm,$xe|
|00000c00| 29 20 3d 20 73 70 6c 69 | 74 28 27 45 27 2c 24 78 |) = spli|t('E',$x|
|00000c10| 29 3b 0d 09 6c 6f 63 61 | 6c 28 24 79 6d 2c 24 79 |);..loca|l($ym,$y|
|00000c20| 65 29 20 3d 20 73 70 6c | 69 74 28 27 45 27 2c 24 |e) = spl|it('E',$|
|00000c30| 79 29 3b 0d 09 28 24 78 | 6d 2c 24 78 65 2c 24 79 |y);..($x|m,$xe,$y|
|00000c40| 6d 2c 24 79 65 29 20 3d | 20 28 24 79 6d 2c 24 79 |m,$ye) =| ($ym,$y|
|00000c50| 65 2c 24 78 6d 2c 24 78 | 65 29 20 69 66 20 28 24 |e,$xm,$x|e) if ($|
|00000c60| 78 65 20 3c 20 24 79 65 | 29 3b 0d 09 26 6e 6f 72 |xe < $ye|);..&nor|
|00000c70| 6d 28 26 27 62 61 64 64 | 28 24 79 6d 2c 24 78 6d |m(&'badd|($ym,$xm|
|00000c80| 2e 28 27 30 27 20 78 20 | 28 24 78 65 2d 24 79 65 |.('0' x |($xe-$ye|
|00000c90| 29 29 29 2c 24 79 65 29 | 3b 0d 20 20 20 20 7d 0d |))),$ye)|;. }.|
|00000ca0| 7d 0d 0d 23 20 73 75 62 | 74 72 61 63 74 69 6f 6e |}..# sub|traction|
|00000cb0| 0d 73 75 62 20 6d 61 69 | 6e 27 66 73 75 62 20 7b |.sub mai|n'fsub {|
|00000cc0| 20 23 28 66 6e 75 6d 5f | 73 74 72 2c 20 66 6e 75 | #(fnum_|str, fnu|
|00000cd0| 6d 5f 73 74 72 29 20 72 | 65 74 75 72 6e 20 66 6e |m_str) r|eturn fn|
|00000ce0| 75 6d 5f 73 74 72 0d 20 | 20 20 20 26 27 66 61 64 |um_str. | &'fad|
|00000cf0| 64 28 24 5f 5b 30 5d 2c | 26 27 66 6e 65 67 28 24 |d($_[0],|&'fneg($|
|00000d00| 5f 5b 31 5d 29 29 3b 20 | 20 20 20 0d 7d 0d 0d 23 |_[1])); | .}..#|
|00000d10| 20 64 69 76 69 73 69 6f | 6e 0d 23 20 20 20 61 72 | divisio|n.# ar|
|00000d20| 67 73 20 61 72 65 20 64 | 69 76 69 64 65 6e 64 2c |gs are d|ividend,|
|00000d30| 20 64 69 76 69 73 6f 72 | 2c 20 73 63 61 6c 65 20 | divisor|, scale |
|00000d40| 28 6f 70 74 69 6f 6e 61 | 6c 29 0d 23 20 20 20 72 |(optiona|l).# r|
|00000d50| 65 73 75 6c 74 20 68 61 | 73 20 61 74 20 6d 6f 73 |esult ha|s at mos|
|00000d60| 74 20 6d 61 78 28 73 63 | 61 6c 65 2c 20 6c 65 6e |t max(sc|ale, len|
|00000d70| 67 74 68 28 64 69 76 69 | 64 65 6e 64 29 2c 20 6c |gth(divi|dend), l|
|00000d80| 65 6e 67 74 68 28 64 69 | 76 69 73 6f 72 29 29 20 |ength(di|visor)) |
|00000d90| 64 69 67 69 74 73 0d 73 | 75 62 20 6d 61 69 6e 27 |digits.s|ub main'|
|00000da0| 66 64 69 76 20 23 28 66 | 6e 75 6d 5f 73 74 72 2c |fdiv #(f|num_str,|
|00000db0| 20 66 6e 75 6d 5f 73 74 | 72 5b 2c 73 63 61 6c 65 | fnum_st|r[,scale|
|00000dc0| 5d 29 20 72 65 74 75 72 | 6e 20 66 6e 75 6d 5f 73 |]) retur|n fnum_s|
|00000dd0| 74 72 0d 7b 0d 20 20 20 | 20 6c 6f 63 61 6c 28 24 |tr.{. | local($|
|00000de0| 78 2c 24 79 2c 24 73 63 | 61 6c 65 29 20 3d 20 28 |x,$y,$sc|ale) = (|
|00000df0| 26 27 66 6e 6f 72 6d 28 | 24 5f 5b 30 5d 29 2c 26 |&'fnorm(|$_[0]),&|
|00000e00| 27 66 6e 6f 72 6d 28 24 | 5f 5b 31 5d 29 2c 24 5f |'fnorm($|_[1]),$_|
|00000e10| 5b 32 5d 29 3b 0d 20 20 | 20 20 69 66 20 28 24 78 |[2]);. | if ($x|
|00000e20| 20 65 71 20 27 4e 61 4e | 27 20 7c 7c 20 24 79 20 | eq 'NaN|' || $y |
|00000e30| 65 71 20 27 4e 61 4e 27 | 20 7c 7c 20 24 79 20 65 |eq 'NaN'| || $y e|
|00000e40| 71 20 27 2b 30 45 2b 30 | 27 29 20 7b 0d 09 27 4e |q '+0E+0|') {..'N|
|00000e50| 61 4e 27 3b 0d 20 20 20 | 20 7d 20 65 6c 73 65 20 |aN';. | } else |
|00000e60| 7b 0d 09 6c 6f 63 61 6c | 28 24 78 6d 2c 24 78 65 |{..local|($xm,$xe|
|00000e70| 29 20 3d 20 73 70 6c 69 | 74 28 27 45 27 2c 24 78 |) = spli|t('E',$x|
|00000e80| 29 3b 0d 09 6c 6f 63 61 | 6c 28 24 79 6d 2c 24 79 |);..loca|l($ym,$y|
|00000e90| 65 29 20 3d 20 73 70 6c | 69 74 28 27 45 27 2c 24 |e) = spl|it('E',$|
|00000ea0| 79 29 3b 0d 09 24 73 63 | 61 6c 65 20 3d 20 24 64 |y);..$sc|ale = $d|
|00000eb0| 69 76 5f 73 63 61 6c 65 | 20 69 66 20 28 21 24 73 |iv_scale| if (!$s|
|00000ec0| 63 61 6c 65 29 3b 0d 09 | 24 73 63 61 6c 65 20 3d |cale);..|$scale =|
|00000ed0| 20 6c 65 6e 67 74 68 28 | 24 78 6d 29 2d 31 20 69 | length(|$xm)-1 i|
|00000ee0| 66 20 28 6c 65 6e 67 74 | 68 28 24 78 6d 29 2d 31 |f (lengt|h($xm)-1|
|00000ef0| 20 3e 20 24 73 63 61 6c | 65 29 3b 0d 09 24 73 63 | > $scal|e);..$sc|
|00000f00| 61 6c 65 20 3d 20 6c 65 | 6e 67 74 68 28 24 79 6d |ale = le|ngth($ym|
|00000f10| 29 2d 31 20 69 66 20 28 | 6c 65 6e 67 74 68 28 24 |)-1 if (|length($|
|00000f20| 79 6d 29 2d 31 20 3e 20 | 24 73 63 61 6c 65 29 3b |ym)-1 > |$scale);|
|00000f30| 0d 09 24 73 63 61 6c 65 | 20 3d 20 24 73 63 61 6c |..$scale| = $scal|
|00000f40| 65 20 2b 20 6c 65 6e 67 | 74 68 28 24 79 6d 29 20 |e + leng|th($ym) |
|00000f50| 2d 20 6c 65 6e 67 74 68 | 28 24 78 6d 29 3b 0d 09 |- length|($xm);..|
|00000f60| 26 6e 6f 72 6d 28 26 72 | 6f 75 6e 64 28 26 27 62 |&norm(&r|ound(&'b|
|00000f70| 64 69 76 28 24 78 6d 2e | 28 27 30 27 20 78 20 24 |div($xm.|('0' x $|
|00000f80| 73 63 61 6c 65 29 2c 24 | 79 6d 29 2c 24 79 6d 29 |scale),$|ym),$ym)|
|00000f90| 2c 0d 09 20 20 20 20 24 | 78 65 2d 24 79 65 2d 24 |,.. $|xe-$ye-$|
|00000fa0| 73 63 61 6c 65 29 3b 0d | 20 20 20 20 7d 0d 7d 0d |scale);.| }.}.|
|00000fb0| 0c 0d 23 20 72 6f 75 6e | 64 20 69 6e 74 20 24 71 |..# roun|d int $q|
|00000fc0| 20 62 61 73 65 64 20 6f | 6e 20 66 72 61 63 74 69 | based o|n fracti|
|00000fd0| 6f 6e 20 24 72 2f 24 62 | 61 73 65 20 75 73 69 6e |on $r/$b|ase usin|
|00000fe0| 67 20 24 72 6e 64 5f 6d | 6f 64 65 0d 73 75 62 20 |g $rnd_m|ode.sub |
|00000ff0| 72 6f 75 6e 64 20 7b 20 | 23 28 69 6e 74 5f 73 74 |round { |#(int_st|
|00001000| 72 2c 20 69 6e 74 5f 73 | 74 72 2c 20 69 6e 74 5f |r, int_s|tr, int_|
|00001010| 73 74 72 29 20 72 65 74 | 75 72 6e 20 69 6e 74 5f |str) ret|urn int_|
|00001020| 73 74 72 0d 20 20 20 20 | 6c 6f 63 61 6c 28 24 71 |str. |local($q|
|00001030| 2c 24 72 2c 24 62 61 73 | 65 29 20 3d 20 40 5f 3b |,$r,$bas|e) = @_;|
|00001040| 0d 20 20 20 20 69 66 20 | 28 24 71 20 65 71 20 27 |. if |($q eq '|
|00001050| 4e 61 4e 27 20 7c 7c 20 | 24 72 20 65 71 20 27 4e |NaN' || |$r eq 'N|
|00001060| 61 4e 27 29 20 7b 0d 09 | 27 4e 61 4e 27 3b 0d 20 |aN') {..|'NaN';. |
|00001070| 20 20 20 7d 20 65 6c 73 | 69 66 20 28 24 72 6e 64 | } els|if ($rnd|
|00001080| 5f 6d 6f 64 65 20 65 71 | 20 27 74 72 75 6e 63 27 |_mode eq| 'trunc'|
|00001090| 29 20 7b 0d 09 24 71 3b | 20 20 20 20 20 20 20 20 |) {..$q;| |
|000010a0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000010b0| 20 23 20 6a 75 73 74 20 | 74 72 75 6e 63 61 74 65 | # just |truncate|
|000010c0| 0d 20 20 20 20 7d 20 65 | 6c 73 65 20 7b 0d 09 6c |. } e|lse {..l|
|000010d0| 6f 63 61 6c 28 24 63 6d | 70 29 20 3d 20 26 27 62 |ocal($cm|p) = &'b|
|000010e0| 63 6d 70 28 26 27 62 6d | 75 6c 28 24 72 2c 27 2b |cmp(&'bm|ul($r,'+|
|000010f0| 32 27 29 2c 24 62 61 73 | 65 29 3b 0d 09 69 66 20 |2'),$bas|e);..if |
|00001100| 28 20 24 63 6d 70 20 3c | 20 30 20 7c 7c 0d 09 09 |( $cmp <| 0 ||...|
|00001110| 20 28 24 63 6d 70 20 3d | 3d 20 30 20 26 26 0d 09 | ($cmp =|= 0 &&..|
|00001120| 09 20 20 28 20 24 72 6e | 64 5f 6d 6f 64 65 20 65 |. ( $rn|d_mode e|
|00001130| 71 20 27 7a 65 72 6f 27 | 20 20 20 20 20 20 20 20 |q 'zero'| |
|00001140| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001150| 20 20 20 20 20 7c 7c 0d | 09 09 20 20 20 28 24 72 | ||.|.. ($r|
|00001160| 6e 64 5f 6d 6f 64 65 20 | 65 71 20 27 2d 69 6e 66 |nd_mode |eq '-inf|
|00001170| 27 20 26 26 20 28 73 75 | 62 73 74 72 28 24 71 2c |' && (su|bstr($q,|
|00001180| 30 2c 31 29 20 65 71 20 | 27 2b 27 29 29 20 7c 7c |0,1) eq |'+')) |||
|00001190| 0d 09 09 20 20 20 28 24 | 72 6e 64 5f 6d 6f 64 65 |... ($|rnd_mode|
|000011a0| 20 65 71 20 27 2b 69 6e | 66 27 20 26 26 20 28 73 | eq '+in|f' && (s|
|000011b0| 75 62 73 74 72 28 24 71 | 2c 30 2c 31 29 20 65 71 |ubstr($q|,0,1) eq|
|000011c0| 20 27 2d 27 29 29 20 7c | 7c 0d 09 09 20 20 20 28 | '-')) |||... (|
|000011d0| 24 72 6e 64 5f 6d 6f 64 | 65 20 65 71 20 27 65 76 |$rnd_mod|e eq 'ev|
|000011e0| 65 6e 27 20 26 26 20 24 | 71 20 3d 7e 20 2f 5b 32 |en' && $|q =~ /[2|
|000011f0| 34 36 38 30 5d 24 2f 29 | 20 20 20 20 20 20 20 20 |4680]$/)| |
|00001200| 7c 7c 0d 09 09 20 20 20 | 28 24 72 6e 64 5f 6d 6f |||... |($rnd_mo|
|00001210| 64 65 20 65 71 20 27 6f | 64 64 27 20 20 26 26 20 |de eq 'o|dd' && |
|00001220| 24 71 20 3d 7e 20 2f 5b | 31 33 35 37 39 5d 24 2f |$q =~ /[|13579]$/|
|00001230| 29 20 20 20 20 20 20 20 | 20 29 29 20 29 20 7b 0d |) | )) ) {.|
|00001240| 09 20 20 20 20 24 71 3b | 20 20 20 20 20 20 20 20 |. $q;| |
|00001250| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 23 20 72 | | # r|
|00001260| 6f 75 6e 64 20 64 6f 77 | 6e 0d 09 7d 20 65 6c 73 |ound dow|n..} els|
|00001270| 65 20 7b 0d 09 20 20 20 | 20 26 27 62 61 64 64 28 |e {.. | &'badd(|
|00001280| 24 71 2c 20 28 28 73 75 | 62 73 74 72 28 24 71 2c |$q, ((su|bstr($q,|
|00001290| 30 2c 31 29 20 65 71 20 | 27 2d 27 29 20 3f 20 27 |0,1) eq |'-') ? '|
|000012a0| 2d 31 27 20 3a 20 27 2b | 31 27 29 29 3b 0d 09 09 |-1' : '+|1'));...|
|000012b0| 09 09 20 20 20 20 23 20 | 72 6f 75 6e 64 20 75 70 |.. # |round up|
|000012c0| 0d 09 7d 0d 20 20 20 20 | 7d 0d 7d 0d 0d 23 20 72 |..}. |}.}..# r|
|000012d0| 6f 75 6e 64 20 74 68 65 | 20 6d 61 6e 74 69 73 73 |ound the| mantiss|
|000012e0| 61 20 6f 66 20 24 78 20 | 74 6f 20 24 73 63 61 6c |a of $x |to $scal|
|000012f0| 65 20 64 69 67 69 74 73 | 0d 73 75 62 20 6d 61 69 |e digits|.sub mai|
|00001300| 6e 27 66 72 6f 75 6e 64 | 20 7b 20 23 28 66 6e 75 |n'fround| { #(fnu|
|00001310| 6d 5f 73 74 72 2c 20 73 | 63 61 6c 65 29 20 72 65 |m_str, s|cale) re|
|00001320| 74 75 72 6e 20 66 6e 75 | 6d 5f 73 74 72 0d 20 20 |turn fnu|m_str. |
|00001330| 20 20 6c 6f 63 61 6c 28 | 24 78 2c 24 73 63 61 6c | local(|$x,$scal|
|00001340| 65 29 20 3d 20 28 26 27 | 66 6e 6f 72 6d 28 24 5f |e) = (&'|fnorm($_|
|00001350| 5b 30 5d 29 2c 24 5f 5b | 31 5d 29 3b 0d 20 20 20 |[0]),$_[|1]);. |
|00001360| 20 69 66 20 28 24 78 20 | 65 71 20 27 4e 61 4e 27 | if ($x |eq 'NaN'|
|00001370| 20 7c 7c 20 24 73 63 61 | 6c 65 20 3c 3d 20 30 29 | || $sca|le <= 0)|
|00001380| 20 7b 0d 09 24 78 3b 0d | 20 20 20 20 7d 20 65 6c | {..$x;.| } el|
|00001390| 73 65 20 7b 0d 09 6c 6f | 63 61 6c 28 24 78 6d 2c |se {..lo|cal($xm,|
|000013a0| 24 78 65 29 20 3d 20 73 | 70 6c 69 74 28 27 45 27 |$xe) = s|plit('E'|
|000013b0| 2c 24 78 29 3b 0d 09 69 | 66 20 28 6c 65 6e 67 74 |,$x);..i|f (lengt|
|000013c0| 68 28 24 78 6d 29 2d 31 | 20 3c 3d 20 24 73 63 61 |h($xm)-1| <= $sca|
|000013d0| 6c 65 29 20 7b 0d 09 20 | 20 20 20 24 78 3b 0d 09 |le) {.. | $x;..|
|000013e0| 7d 20 65 6c 73 65 20 7b | 0d 09 20 20 20 20 26 6e |} else {|.. &n|
|000013f0| 6f 72 6d 28 26 72 6f 75 | 6e 64 28 73 75 62 73 74 |orm(&rou|nd(subst|
|00001400| 72 28 24 78 6d 2c 30 2c | 24 73 63 61 6c 65 2b 31 |r($xm,0,|$scale+1|
|00001410| 29 2c 0d 09 09 09 20 22 | 2b 30 22 2e 73 75 62 73 |),.... "|+0".subs|
|00001420| 74 72 28 24 78 6d 2c 24 | 73 63 61 6c 65 2b 31 2c |tr($xm,$|scale+1,|
|00001430| 31 29 2c 22 2b 31 30 22 | 29 2c 0d 09 09 20 20 24 |1),"+10"|),... $|
|00001440| 78 65 2b 6c 65 6e 67 74 | 68 28 24 78 6d 29 2d 24 |xe+lengt|h($xm)-$|
|00001450| 73 63 61 6c 65 2d 31 29 | 3b 0d 09 7d 0d 20 20 20 |scale-1)|;..}. |
|00001460| 20 7d 0d 7d 0d 0c 0d 23 | 20 72 6f 75 6e 64 20 24 | }.}...#| round $|
|00001470| 78 20 61 74 20 74 68 65 | 20 31 30 20 74 6f 20 74 |x at the| 10 to t|
|00001480| 68 65 20 24 73 63 61 6c | 65 20 64 69 67 69 74 20 |he $scal|e digit |
|00001490| 70 6c 61 63 65 0d 73 75 | 62 20 6d 61 69 6e 27 66 |place.su|b main'f|
|000014a0| 66 72 6f 75 6e 64 20 7b | 20 23 28 66 6e 75 6d 5f |fround {| #(fnum_|
|000014b0| 73 74 72 2c 20 73 63 61 | 6c 65 29 20 72 65 74 75 |str, sca|le) retu|
|000014c0| 72 6e 20 66 6e 75 6d 5f | 73 74 72 0d 20 20 20 20 |rn fnum_|str. |
|000014d0| 6c 6f 63 61 6c 28 24 78 | 2c 24 73 63 61 6c 65 29 |local($x|,$scale)|
|000014e0| 20 3d 20 28 26 27 66 6e | 6f 72 6d 28 24 5f 5b 30 | = (&'fn|orm($_[0|
|000014f0| 5d 29 2c 24 5f 5b 31 5d | 29 3b 0d 20 20 20 20 69 |]),$_[1]|);. i|
|00001500| 66 20 28 24 78 20 65 71 | 20 27 4e 61 4e 27 29 20 |f ($x eq| 'NaN') |
|00001510| 7b 0d 09 27 4e 61 4e 27 | 3b 0d 20 20 20 20 7d 20 |{..'NaN'|;. } |
|00001520| 65 6c 73 65 20 7b 0d 09 | 6c 6f 63 61 6c 28 24 78 |else {..|local($x|
|00001530| 6d 2c 24 78 65 29 20 3d | 20 73 70 6c 69 74 28 27 |m,$xe) =| split('|
|00001540| 45 27 2c 24 78 29 3b 0d | 09 69 66 20 28 24 78 65 |E',$x);.|.if ($xe|
|00001550| 20 3e 3d 20 24 73 63 61 | 6c 65 29 20 7b 0d 09 20 | >= $sca|le) {.. |
|00001560| 20 20 20 24 78 3b 0d 09 | 7d 20 65 6c 73 65 20 7b | $x;..|} else {|
|00001570| 0d 09 20 20 20 20 24 78 | 65 20 3d 20 6c 65 6e 67 |.. $x|e = leng|
|00001580| 74 68 28 24 78 6d 29 2b | 24 78 65 2d 24 73 63 61 |th($xm)+|$xe-$sca|
|00001590| 6c 65 3b 0d 09 20 20 20 | 20 69 66 20 28 24 78 65 |le;.. | if ($xe|
|000015a0| 20 3c 20 31 29 20 7b 0d | 09 09 27 2b 30 45 2b 30 | < 1) {.|..'+0E+0|
|000015b0| 27 3b 0d 09 20 20 20 20 | 7d 20 65 6c 73 69 66 20 |';.. |} elsif |
|000015c0| 28 24 78 65 20 3d 3d 20 | 31 29 20 7b 0d 09 09 26 |($xe == |1) {...&|
|000015d0| 6e 6f 72 6d 28 26 72 6f | 75 6e 64 28 27 2b 30 27 |norm(&ro|und('+0'|
|000015e0| 2c 22 2b 30 22 2e 73 75 | 62 73 74 72 28 24 78 6d |,"+0".su|bstr($xm|
|000015f0| 2c 31 2c 31 29 2c 22 2b | 31 30 22 29 2c 20 24 73 |,1,1),"+|10"), $s|
|00001600| 63 61 6c 65 29 3b 0d 09 | 20 20 20 20 7d 20 65 6c |cale);..| } el|
|00001610| 73 65 20 7b 0d 09 09 26 | 6e 6f 72 6d 28 26 72 6f |se {...&|norm(&ro|
|00001620| 75 6e 64 28 73 75 62 73 | 74 72 28 24 78 6d 2c 30 |und(subs|tr($xm,0|
|00001630| 2c 24 74 72 75 6e 63 29 | 2c 0d 09 09 20 20 20 20 |,$trunc)|,... |
|00001640| 20 20 22 2b 30 22 2e 73 | 75 62 73 74 72 28 24 78 | "+0".s|ubstr($x|
|00001650| 6d 2c 24 74 72 75 6e 63 | 2c 31 29 2c 22 2b 31 30 |m,$trunc|,1),"+10|
|00001660| 22 29 2c 20 24 73 63 61 | 6c 65 29 3b 0d 09 20 20 |"), $sca|le);.. |
|00001670| 20 20 7d 0d 09 7d 0d 20 | 20 20 20 7d 0d 7d 0d 20 | }..}. | }.}. |
|00001680| 20 20 20 0d 23 20 63 6f | 6d 70 61 72 65 20 32 20 | .# co|mpare 2 |
|00001690| 76 61 6c 75 65 73 20 72 | 65 74 75 72 6e 73 20 6f |values r|eturns o|
|000016a0| 6e 65 20 6f 66 20 75 6e | 64 65 66 2c 20 3c 30 2c |ne of un|def, <0,|
|000016b0| 20 3d 30 2c 20 3e 30 0d | 23 20 20 20 72 65 74 75 | =0, >0.|# retu|
|000016c0| 72 6e 73 20 75 6e 64 65 | 66 20 69 66 20 65 69 74 |rns unde|f if eit|
|000016d0| 68 65 72 20 6f 72 20 62 | 6f 74 68 20 69 6e 70 75 |her or b|oth inpu|
|000016e0| 74 20 76 61 6c 75 65 20 | 61 72 65 20 6e 6f 74 20 |t value |are not |
|000016f0| 6e 75 6d 62 65 72 73 0d | 73 75 62 20 6d 61 69 6e |numbers.|sub main|
|00001700| 27 66 63 6d 70 20 23 28 | 66 6e 75 6d 5f 73 74 72 |'fcmp #(|fnum_str|
|00001710| 2c 20 66 6e 75 6d 5f 73 | 74 72 29 20 72 65 74 75 |, fnum_s|tr) retu|
|00001720| 72 6e 20 63 6f 6e 64 5f | 63 6f 64 65 0d 7b 0d 20 |rn cond_|code.{. |
|00001730| 20 20 20 6c 6f 63 61 6c | 28 24 78 2c 20 24 79 29 | local|($x, $y)|
|00001740| 20 3d 20 28 26 27 66 6e | 6f 72 6d 28 24 5f 5b 30 | = (&'fn|orm($_[0|
|00001750| 5d 29 2c 26 27 66 6e 6f | 72 6d 28 24 5f 5b 31 5d |]),&'fno|rm($_[1]|
|00001760| 29 29 3b 0d 20 20 20 20 | 69 66 20 28 24 78 20 65 |));. |if ($x e|
|00001770| 71 20 22 4e 61 4e 22 20 | 7c 7c 20 24 79 20 65 71 |q "NaN" ||| $y eq|
|00001780| 20 22 4e 61 4e 22 29 20 | 7b 0d 09 75 6e 64 65 66 | "NaN") |{..undef|
|00001790| 3b 0d 20 20 20 20 7d 20 | 65 6c 73 65 20 7b 0d 09 |;. } |else {..|
|000017a0| 6f 72 64 28 24 79 29 20 | 3c 3d 3e 20 6f 72 64 28 |ord($y) |<=> ord(|
|000017b0| 24 78 29 0d 09 7c 7c 0d | 09 28 20 20 6c 6f 63 61 |$x)..||.|.( loca|
|000017c0| 6c 28 24 78 6d 2c 24 78 | 65 2c 24 79 6d 2c 24 79 |l($xm,$x|e,$ym,$y|
|000017d0| 65 29 20 3d 20 73 70 6c | 69 74 28 27 45 27 2c 20 |e) = spl|it('E', |
|000017e0| 24 78 2e 22 45 24 79 22 | 29 2c 0d 09 20 20 20 20 |$x."E$y"|),.. |
|000017f0| 20 28 28 24 78 65 20 3c | 3d 3e 20 24 79 65 29 20 | (($xe <|=> $ye) |
|00001800| 2a 20 28 73 75 62 73 74 | 72 28 24 78 2c 30 2c 31 |* (subst|r($x,0,1|
|00001810| 29 2e 27 31 27 29 0d 20 | 20 20 20 20 20 20 20 20 |).'1'). | |
|00001820| 20 20 20 20 7c 7c 20 26 | 62 69 67 69 6e 74 27 63 | || &|bigint'c|
|00001830| 6d 70 28 24 78 6d 2c 24 | 79 6d 29 29 0d 09 29 3b |mp($xm,$|ym))..);|
|00001840| 0d 20 20 20 20 7d 0d 7d | 0d 0c 0d 23 20 73 71 75 |. }.}|...# squ|
|00001850| 61 72 65 20 72 6f 6f 74 | 20 62 79 20 4e 65 77 74 |are root| by Newt|
|00001860| 6f 6e 73 20 6d 65 74 68 | 6f 64 2e 0d 73 75 62 20 |ons meth|od..sub |
|00001870| 6d 61 69 6e 27 66 73 71 | 72 74 20 7b 20 23 28 66 |main'fsq|rt { #(f|
|00001880| 6e 75 6d 5f 73 74 72 5b | 2c 20 73 63 61 6c 65 5d |num_str[|, scale]|
|00001890| 29 20 72 65 74 75 72 6e | 20 66 6e 75 6d 5f 73 74 |) return| fnum_st|
|000018a0| 72 0d 20 20 20 20 6c 6f | 63 61 6c 28 24 78 2c 20 |r. lo|cal($x, |
|000018b0| 24 73 63 61 6c 65 29 20 | 3d 20 28 26 27 66 6e 6f |$scale) |= (&'fno|
|000018c0| 72 6d 28 24 5f 5b 30 5d | 29 2c 20 24 5f 5b 31 5d |rm($_[0]|), $_[1]|
|000018d0| 29 3b 0d 20 20 20 20 69 | 66 20 28 24 78 20 65 71 |);. i|f ($x eq|
|000018e0| 20 27 4e 61 4e 27 20 7c | 7c 20 24 78 20 3d 7e 20 | 'NaN' ||| $x =~ |
|000018f0| 2f 5e 2d 2f 29 20 7b 0d | 09 27 4e 61 4e 27 3b 0d |/^-/) {.|.'NaN';.|
|00001900| 20 20 20 20 7d 20 65 6c | 73 69 66 20 28 24 78 20 | } el|sif ($x |
|00001910| 65 71 20 27 2b 30 45 2b | 30 27 29 20 7b 0d 09 27 |eq '+0E+|0') {..'|
|00001920| 2b 30 45 2b 30 27 3b 0d | 20 20 20 20 7d 20 65 6c |+0E+0';.| } el|
|00001930| 73 65 20 7b 0d 09 6c 6f | 63 61 6c 28 24 78 6d 2c |se {..lo|cal($xm,|
|00001940| 20 24 78 65 29 20 3d 20 | 73 70 6c 69 74 28 27 45 | $xe) = |split('E|
|00001950| 27 2c 24 78 29 3b 0d 09 | 24 73 63 61 6c 65 20 3d |',$x);..|$scale =|
|00001960| 20 24 64 69 76 5f 73 63 | 61 6c 65 20 69 66 20 28 | $div_sc|ale if (|
|00001970| 21 24 73 63 61 6c 65 29 | 3b 0d 09 24 73 63 61 6c |!$scale)|;..$scal|
|00001980| 65 20 3d 20 6c 65 6e 67 | 74 68 28 24 78 6d 29 2d |e = leng|th($xm)-|
|00001990| 31 20 69 66 20 28 24 73 | 63 61 6c 65 20 3c 20 6c |1 if ($s|cale < l|
|000019a0| 65 6e 67 74 68 28 24 78 | 6d 29 2d 31 29 3b 0d 09 |ength($x|m)-1);..|
|000019b0| 6c 6f 63 61 6c 28 24 67 | 73 2c 20 24 67 75 65 73 |local($g|s, $gues|
|000019c0| 73 29 20 3d 20 28 31 2c | 20 73 70 72 69 6e 74 66 |s) = (1,| sprintf|
|000019d0| 28 22 31 45 25 2b 64 22 | 2c 20 28 6c 65 6e 67 74 |("1E%+d"|, (lengt|
|000019e0| 68 28 24 78 6d 29 2b 24 | 78 65 2d 31 29 2f 32 29 |h($xm)+$|xe-1)/2)|
|000019f0| 29 3b 0d 09 77 68 69 6c | 65 20 28 24 67 73 20 3c |);..whil|e ($gs <|
|00001a00| 20 32 2a 24 73 63 61 6c | 65 29 20 7b 0d 09 20 20 | 2*$scal|e) {.. |
|00001a10| 20 20 24 67 75 65 73 73 | 20 3d 20 26 27 66 6d 75 | $guess| = &'fmu|
|00001a20| 6c 28 26 27 66 61 64 64 | 28 24 67 75 65 73 73 2c |l(&'fadd|($guess,|
|00001a30| 26 27 66 64 69 76 28 24 | 78 2c 24 67 75 65 73 73 |&'fdiv($|x,$guess|
|00001a40| 2c 24 67 73 2a 32 29 29 | 2c 22 2e 35 22 29 3b 0d |,$gs*2))|,".5");.|
|00001a50| 09 20 20 20 20 24 67 73 | 20 2a 3d 20 32 3b 0d 09 |. $gs| *= 2;..|
|00001a60| 7d 0d 09 26 27 66 72 6f | 75 6e 64 28 24 67 75 65 |}..&'fro|und($gue|
|00001a70| 73 73 2c 20 24 73 63 61 | 6c 65 29 3b 0d 20 20 20 |ss, $sca|le);. |
|00001a80| 20 7d 0d 7d 0d 0d 31 3b | 0d 00 00 00 00 00 00 00 | }.}..1;|........|
|00001a90| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00001aa0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00001ab0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00001ac0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00001ad0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00001ae0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00001af0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00001b00| 00 00 01 00 00 00 01 6e | 00 00 00 6e 00 00 00 3e |.......n|...n...>|
|00001b10| 69 64 65 20 65 66 66 65 | 63 74 2e 0d 0d 73 75 62 |ide effe|ct...sub|
|00001b20| 20 47 65 74 6f 70 74 20 | 7b 0d 20 20 20 20 6c 6f | Getopt |{. lo|
|00001b30| 0b 62 69 67 66 6c 6f 61 | 74 2e 70 6c 02 00 00 00 |.bigfloa|t.pl....|
|00001b40| 54 45 58 54 4d 50 53 20 | 00 00 00 00 00 00 00 00 |TEXTMPS |........|
|00001b50| 00 00 54 45 58 54 4d 50 | 53 20 00 00 00 00 00 00 |..TEXTMP|S ......|
|00001b60| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00001b70| 00 00 a6 ea b0 3a 00 00 | 1a 09 00 00 01 ac 77 68 |.....:..|......wh|
|00001b80| 69 6c 65 20 28 40 41 52 | 47 56 20 26 26 20 28 24 |ile (@AR|GV && ($|
|00001b90| 5f 20 3d 20 24 41 52 47 | 56 5b 30 5d 29 20 3d 7e |_ = $ARG|V[0]) =~|
|00001ba0| 20 2f 5e 2d 28 2e 29 28 | 2e 2a 29 2f 29 20 7b 0d | /^-(.)(|.*)/) {.|
|00001bb0| 09 28 24 66 69 72 73 74 | 2c 24 72 65 73 74 29 20 |.($first|,$rest) |
|00001bc0| 3d 20 28 24 31 2c 24 32 | 29 3b 0d 09 69 66 20 28 |= ($1,$2|);..if (|
|00001bd0| 69 6e 64 65 78 28 24 61 | 72 67 75 6d 65 6e 74 61 |index($a|rgumenta|
|00001be0| 74 69 76 65 2c 24 66 69 | 72 73 74 29 20 3e 3d 20 |tive,$fi|rst) >= |
|00001bf0| 24 5b 29 20 7b 0d 09 20 | 20 20 20 69 66 20 28 24 |$[) {.. | if ($|
|00001c00| 00 00 00 48 00 09 4d 6f | 6e 61 63 6f 00 6e 67 74 |...H..Mo|naco.ngt|
|00001c10| 68 20 66 6c 6f 61 74 20 | 6d 61 74 68 20 70 61 63 |h float |math pac|
|00001c20| 6b 61 67 65 0d 23 00 06 | 00 08 00 3c 00 24 01 dd |kage.#..|...<.$..|
|00001c30| 02 3d 00 3c 00 24 01 dd | 02 3d a6 eb a5 84 00 00 |.=.<.$..|.=......|
|00001c40| 17 c1 00 00 17 c1 00 00 | 00 00 01 00 00 00 00 1e |........|........|
|00001c50| 00 3c 00 24 01 dd 02 3d | 00 3c 00 24 01 dd 02 3d |.<.$...=|.<.$...=|
|00001c60| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00001c70| 01 00 00 00 01 6e 00 00 | 00 6e 00 00 00 3e 00 4a |.....n..|.n...>.J|
|00001c80| ee 28 12 5e 00 00 00 1c | 00 3e 00 00 4d 50 53 52 |.(.^....|.>..MPSR|
|00001c90| 00 01 00 0a 03 ed ff ff | 00 00 00 00 00 00 00 00 |........|........|
|00001ca0| 03 f0 ff ff 00 00 00 4c | 00 51 20 a4 00 00 00 00 |.......L|.Q .....|
|00001cb0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00001cc0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00001cd0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00001ce0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00001cf0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
+--------+-------------------------+-------------------------+--------+--------+